#include <iostream>
#include <array>
#include <vector>

int main()
{
    int nArry[] = {1,2,3,4,5}; // 在栈区定义了一个大小为5的数组
    int* pArry = new int[]{1,2,3,4,5}; // 在堆区定义了一个大小为5的数组
    std::array<int , 5> arrStd = {1,2,3,4,5}; // 使用std::array定义数组
    std::vector<int> arrVec{1,2,3,4,5}; // 使用std::vector定义数组

    for ( int i = 0; i < sizeof(nArry)/sizeof(int); i++ )
    {
        std::cout << nArry[i] << " "; // 下标访问
    }
    std::cout << std::endl;

    for (const auto &item : arrVec)
    {
        std::cout << item << " "; // 范围for访问
    }
    std::cout << std::endl;

    for (auto it = arrStd.cbegin() ; it != arrStd.cend() ; it++)
    {
        std::cout << *it << " "; // 迭代器访问
    }
    std::cout << std::endl;

    for (int i = 0 ; i < arrVec.size() ; i++)
    {
        std::cout << arrVec.at(i) << " "; // at()方法访问
    }
    std::cout << std::endl;

    arrVec.insert(arrVec.begin() + 2 , 99 ); // 在下标2的位置插入99
    for (const auto &item : arrVec)
    {
        std::cout << item << " ";
    }
    std::cout << std::endl;
    arrVec.erase(arrVec.begin() + 3); // 删除下标3的元素
    for (const auto &item : arrVec)
    {
        std::cout << item << " ";
    }

    // nArry[5] = 6; // 越界访问
    //
    // pArry[5] = 6; // 越界访问
    // arrStd[5] = 6; // 越界访问
    delete[] pArry;

    int arr[3] = {1, 2, 3};
    int i = 0;
    while (i < 6)
    {
        std::cout << arr[i] << std::endl;
        arr[3] = 0; // 越界写入，可能覆盖i的值
        i++;
    }

    return 0;
}
